草庐IT

c++ - 严格的别名规则

全部标签

c - mkmf 在编译 C 扩展时忽略子文件夹中的文件

我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。

c - 这是什么宏?

在ruby.h中,有很多函数宏是这样定义的:staticinlineint#ifdefined(HAVE_PROTOTYPES)rb_type(VALUEobj)#elserb_type(obj)VALUEobj;#endif{if(FIXNUM_P(obj))returnT_FIXNUM;if(obj==Qnil)returnT_NIL;if(obj==Qfalse)returnT_FALSE;if(obj==Qtrue)returnT_TRUE;if(obj==Qundef)returnT_UNDEF;if(SYMBOL_P(obj))returnT_SYMBOL;returnBU

ruby - 我可以删除 Ruby 中的方法别名吗?

假设我有一段Ruby代码,我想在其中为一个方法设置别名(我不知道为什么;让我们假设我有一个很好的理由)。classStringalias_method:contains?,:include?end我可以在本节之后删除这个别名吗? 最佳答案 remove_method在大多数情况下应该有效。但是,如果您的alias_method覆盖了现有方法,您可能需要通过单独的alias_method调用来保存原始方法。#assuming:contains?isalreadyamethodalias_method:original_contains

c - Ruby - 源代码 - 编码风格

查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity

c - 如何使用 RubyInline 将 ruby​​ 数组转换为 C 数组?

我有一个函数,可以逐个字符地比较2个字符串。我需要它比在Ruby中运行得更快,所以我使用RubyInline重写了C中的函数。它确实将速度提高了大约100倍。该函数如下所示:require'inline'inlinedo|builder|builder.c"staticintdistance(char*s,char*t){...}"end但是我需要比较unicode字符串。所以我决定改用unpack("U*")并比较整数数组。我无法从RubyInline的稀少文档中弄清楚如何将ruby​​数组传递给函数以及如何将它们转换为C数组。感谢您的帮助! 最佳答案

ruby - Rubocop 规则 : Never use 'do' with multi-line 'while

我有以下代码#coloursarandomcellwithacorrectcolourdefcolour_random!whiletruedocol,row=rand(columns),rand(rows)cell=self[row,col]ifcell.empty?thencell.should_be_filled??cell.colour!(1):cell.colour!(0)breakendendend做什么并不重要,尽管它应该很明显。关键是Rubocop给了我一个警告Neveruse'do'withmulti-line'while为什么我不应该那样做?那我该怎么办呢?

ruby-on-rails - 如何获取调用别名方法的名称?

我有一个名为link_to_admin的方法然后我给另一个方法取了别名simple_link_todeflink_to_admin(name,url,options={})#Mystuffherelink_to(name,url,options)endalias_method:simple_link_to,:link_to_admin如果我调用link_to_admin,我会遇到一个问题,我想将值打印到标记例如deflink_to_admin(name,url,options={})#Mystuffheremenu=""menu#{link_to(name,url,options)}"

ruby-on-rails - Ruby 1.9.3 -> 2.0 别名方法和扩展

我正在尝试将Ruby1.9.3应用程序升级到2.0,除了一个小问题外,一切似乎都很顺利。我写了一个模块,我将其包含在我的模型中以覆盖activerecorddestroy。它将现有的destroy方法别名为destroy!,然后覆盖destroy以更改记录上的deleted_at时间戳。仅当我升级到ruby​​2.0时,destroy!不再破坏记录,但其行为就像我的新覆盖方法一样。知道为什么会这样吗?下面是更相关的代码部分。完整要点here.defself.included(base)base.class_evaldoalias_method:destroy!,:destroyalia

objective-c - 将 Cocoa header 链接到 ruby​​ C 扩展

我正在为ruby​​开发一个C扩展,但我需要包含来自IOBluetooth框架的header,特别是:#import#import一切都编译正常,但在运行时,扩展错误:path/to/file.rb:1:in`require_relative':dlopen(/path/to/extension.bundle,9):Symbolnotfound:_OBJC_CLASS_$_IOBluetoothDeviceInquiry(LoadError)我相当确定这与未包含在链接过程中的框架有关,但我不确定原因。任何帮助将不胜感激extconf.rb:#Loadsmkmfwhichisusedto

ruby-on-rails - 如何在模块中为类方法起别名?

我正在使用Rubyv1.9.2和RubyonRailsv3.2.2gem。我有以下模块moduleMyModuleextendActiveSupport::Concernincludeddodefself.my_method(arg1,arg2)...endendend我想为类方法my_method起别名。因此,我声明了以下(不工作)代码:moduleMyModuleextendActiveSupport::Concernincludeddodefself.my_method(arg1,arg2)...end#Note:thefollowingcodedoesn'twork(itrai